﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Manager.Camada.Logica;
using Manager.Camada.Negocio;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

namespace Manager.Camada.BancoDados
{
    public class ProjetoDAOImpl : ProjetoDAO
    {
        ClienteDAOImpl daoCliente = new ClienteDAOImpl();
        EmpresaDAOImpl daoEmpresa = new EmpresaDAOImpl();
        UsuarioDAOImpl daoUsuario = new UsuarioDAOImpl();

        string strConnection = ConfigurationManager.ConnectionStrings["ConexaoBanco"].ConnectionString.ToString();

        public void inserirProjeto(ProjetoVO projeto)
        {
            using (SqlConnection sqlConnection = new SqlConnection(strConnection))
            {
                sqlConnection.Open();

                SqlTransaction transaction = sqlConnection.BeginTransaction("SampleTransaction");

                try
                {
                    string sqlSalvar = "INSERT INTO PROJETO (IDCLIENTE, NOME, DESCRICAO)"
                        + "VALUES (@idCliente,@Nome,@Descricao)select SCOPE_IDENTITY()";

                    SqlCommand command = new SqlCommand(sqlSalvar, sqlConnection);

                    command.Parameters.AddWithValue("@idCliente", projeto.cliente.idCliente);
                    command.Parameters.AddWithValue("@Nome", projeto.nome);
                    command.Parameters.AddWithValue("@Descricao", projeto.descricao);

                    int id = Convert.ToInt16(command.ExecuteScalar());

                    transaction.Commit();
                    sqlConnection.Close();
                }
                catch
                {
                    transaction.Rollback();
                    sqlConnection.Close();
                }
            }
        }

        public List<ProjetoVO> listaProjetosPorCliente(long idCliente)
        {
            List<ProjetoVO> listaProjeto = new List<ProjetoVO>();

            using (SqlConnection sqlconnection = new SqlConnection(strConnection))
            {
                sqlconnection.Open();

                SqlTransaction transaction = sqlconnection.BeginTransaction("SampleTransaction");

                try
                {
                    string sqlBusca = "SELECT * FROM PROJETO WHERE IDCLIENTE = @idCliente";

                    SqlCommand cmd = new SqlCommand(sqlBusca, sqlconnection, transaction);

                    cmd.Parameters.AddWithValue("@idCliente", idCliente);

                    SqlDataReader dr = cmd.ExecuteReader();

                    DataTable tblProjeto = new DataTable();
                    tblProjeto.Load(dr);

                    if (tblProjeto.Rows.Count > 0)
                    {
                        listaProjeto = mountListaProjeto(tblProjeto);
                    }

                    transaction.Commit();
                    sqlconnection.Close();
                }
                catch
                {
                    transaction.Rollback();
                    sqlconnection.Close();
                }
            }

            return listaProjeto;
        }

        private List<ProjetoVO> mountListaProjeto(DataTable tblProjeto)
        {
            List<ProjetoVO> listaProjeto = new List<ProjetoVO>();

            foreach (DataRow row in tblProjeto.Rows)
            {
                ProjetoVO projeto = new ProjetoVO();

                projeto.idProjeto = Convert.ToInt32(row["IDPROJETO"]);

                ClienteVO cliente = new ClienteVO();
                cliente = daoCliente.buscaClienteIdCliente(Convert.ToInt32(row["IDCLIENTE"]));
                projeto.cliente = cliente;

                projeto.nome = Convert.ToString(row["NOME"]);
                projeto.descricao = Convert.ToString(row["DESCRICAO"]);

                listaProjeto.Add(projeto);
            }

            return listaProjeto;
        }

    }
}
